package com.isky.visual.db.service;

import com.isky.visual.common.BasePageResult;
import com.isky.visual.db.domain.DatabaseConfig;
import com.isky.visual.db.entity.DataStoreModel;
import com.isky.visual.db.entity.Datastore;
import com.isky.visual.db.entity.GenericSqlModel;
import com.isky.visual.db.entity.Source;
import com.baomidou.mybatisplus.extension.service.IService;
import com.isky.visual.db.vo.param.QueryTableDataParam;
import com.isky.visual.result.ResultVo;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletResponse;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 数据库连接的配置表 服务类
 * </p>
 *
 * @author wudl
 * @since 2020-04-14
 */
public interface ISourceService {

    /**
     * 测试数据库连接
     *
     * @param source
     * @return
     */
    public ResultVo<String> dbIsConnection(Source source);

    /**
     * 保存数据源
     *
     * @param
     * @param source
     * @return
     */
    public ResultVo<String> saveDbSource(Source source);

    /**
     * 更新数据源
     *
     * @param response
     * @param source
     * @return
     */

    public ResultVo<String> updateDbSource(HttpServletResponse response, Source source);

    /**
     * 删除数据源
     * @param response
     * @param dbId
     * @param userId
     * @return
     */

    public ResultVo<String> delDbSource(HttpServletResponse response, Long dbId);

    /**
     * 获取所有的数据源
     *
     * @return
     */
    public ResultVo<List<Source>> getAllSource();


    /**
     * 解析sql
     *
     * @param dataStoreModel
     * @return
     */
    public ResultVo<Datastore> getSqlParse(DataStoreModel dataStoreModel);

    /**
     * 根据参数线束sql 语句
     * @param dataStoreModel
     * @return
     */
    public ResultVo<String> getShowSql(DataStoreModel dataStoreModel);

    public ResultVo<Datastore> GetCustomSqlPares(Map<String, String> mapdb);

    /**
     * 自定义sql 的结果展示
     * @param mapdb
     * @return
     */
    ResultVo<List<Map<String, Object>>>  GetCustomSqlShowData(Map<String, String> mapdb);

    /**
     * 根据数据库id 和表名id  查询相关的数据
     *
     * @param queryTableDataParam
     * @return
     */
    public ResultVo<BasePageResult> getTableData(QueryTableDataParam queryTableDataParam);

    /**
     * 显示结果集
     * @param dataStoreModel
     * @return
     */
    public ResultVo<Object> showDataResult(DataStoreModel dataStoreModel );

    /**
     * 根据数据库的id  和表名称 ，查询出来 表的列
     * @param dbId
     * @param tableName
     * @return
     */
    public ResultVo<Object>  showColumn( Long dbId, String tableName);

    /**
     * 根据数据库id 查询该数据库下面所有的表
     * @param dbId
     * @return
     */
    public ResultVo<Object> showTable( Long dbId);

}